﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sio.Mdm.Entities;
using Sio.Mdm.Types.Database;
using Ext.Net;

namespace Sio.Mdm.Web.Instalacija.Varnost
{
    public partial class PraviceFunkcionalnosti : Controls.Page
    {

        #region OnLoad
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            NaloziSeznam();
        }

        protected void GridDodeljenoRefresh(object sender, StoreRefreshDataEventArgs e)
        {
            string id = e.Parameters["PravicaId"];
            NaloziSeznamFunkcionalnosti(Int32.Parse(id));
        }

        protected void DodajFunkcionalnosti(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "FunkcionalnostId");
            int PravicaId = e.DeserializeParameter<int>("PravicaId");
            if (id.Count > 0)
            {
                foreach (var funkcionalnostId in id)
                {
                    var vp = EntityFactory.CreateInstance<PravicaFunkcionalnost>();
                    vp.PravicaID = PravicaId;
                    vp.FunkcionalnostID = funkcionalnostId;
                    vp.Update();
                }
            }
        }

        protected void OdstraniFunkcionalnosti(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "FunkcionalnostId");
            int PravicaId = e.DeserializeParameter<int>("PravicaId");
            if (id.Count > 0)
            {
                EntityCollection<PravicaFunkcionalnost> col = new EntityCollection<PravicaFunkcionalnost>(
                    new Filter<PravicaFunkcionalnost>().Where(r => r.PravicaID == PravicaId).SelectByField(r => r.FunkcionalnostID, id.ToArray())
                );
                col.RemoveAll();
                col.Update();
            }
        }
        #endregion

        #region Private
        private void NaloziSeznam()
        {
            GridSplosniSeznam.LoadData<Pravica>(
                new Filter<Pravica>().Where(r => r.PravicaId != null));
        }

        private void NaloziSeznamFunkcionalnosti(int pravicaId)
        {
            var a = String.Format(":{0}", pravicaId);

            GridDodeljeno.LoadData<Funkcionalnost>(
                new Filter<Funkcionalnost>().LeftJoin(new Filter<PravicaFunkcionalnost>(), r => r.FunkcionalnostId.ToString() + a.ToString(), s => s.FunkcionalnostID.ToString() + ':' + s.PravicaID.ToString(), (r, s) => r, (j, k) => (k.FunkcionalnostID != null)));

            GridNeDodeljeno.LoadData<Funkcionalnost>(
                new Filter<Funkcionalnost>().LeftJoin(new Filter<PravicaFunkcionalnost>(), r => r.FunkcionalnostId.ToString() + a.ToString(), s => s.FunkcionalnostID.ToString() + ':' + s.PravicaID.ToString(), (r, s) => r, (j, k) => (k.FunkcionalnostID == null)));
        }
        #endregion
    }
}
